home *** CD-ROM | disk | FTP | other *** search
/ Maclife 42 / MACLIFE42.ISO.7z / MACLIFE42.ISO / FreeWare200 / 圧縮伸張⁄コード / MacGzip / MacGzip 1.1.2 Source.sea / MacGzip 1.1.2 Source / Mac / GzErrors.c < prev    next >
Text File  |  1997-04-01  |  4KB  |  238 lines

  1. /*
  2.  * Errors.c
  3.  *
  4.  * (c)1990-1995 SPDsoft <MacSPD@ivo.cps.unizar.es>
  5.  *
  6.  */
  7. #include <stdio.h>
  8. #include <stdarg.h>
  9. #include <string.h>
  10. #include <errno.h>
  11.  
  12.  
  13. #include "FileTypes.h"
  14. #include "Globals.h"
  15.  
  16. #include "GzErrors.h"
  17. #include "GzPStrings.h"
  18.  
  19.  
  20.  
  21. #define    kErrResType        'Errs'
  22.  
  23. #define    kGenericAskID    152
  24. #define    kGenericNoteID    153
  25. #define    kSysErrAskID    150
  26. #define    kSysErrNoteID    151
  27.  
  28. /*
  29.  * Globals
  30.  */
  31.  
  32. OSErr            err;
  33. Str255            error_fmt;
  34. extern int        errno;
  35.  
  36. int            DoStdIO( void *foo, const char *fmt, ...);
  37. int            DoError( int ErrType, int ErrSever,const char *, ...);
  38. char        *GetErrFmt( short ErrType, short ErrID );
  39. static int _DoError( int ErrType, int ErrLevel, char *StrTmp);
  40.  
  41. /*
  42.  * He sintonizado otro canal
  43.  * he salido a la calle camuflado
  44.  * he dejado de so紡r con ovejas el残tricas
  45.  * pero no se si estoy preparado...
  46.  * para todo lo que vendr‡ despu市
  47.  */
  48.  
  49. char *GetErrFmt( short ErrType, short ErrID )
  50. {
  51.     GetIndString( error_fmt, ErrType, ErrID);
  52.     p2cstr(error_fmt);
  53.     return( (char *) &error_fmt[0] );
  54. }
  55.  
  56. int DoStdIO( void *foo, const char *fmt, ...)
  57. {
  58. #pragma unused(foo)
  59.  
  60.     va_list            vl;
  61.     char            StrTmp[256];
  62.     
  63.     va_start(vl,fmt);
  64.     
  65.         vsprintf(StrTmp, fmt, vl);
  66.     
  67.     va_end(vl);
  68.     
  69.     return (_DoError( NO_ERR, WARN_ERR, StrTmp ));
  70. }
  71.  
  72. int DoError( int ErrType, int ErrLevel, const char *fmt, ...)
  73. {
  74.     va_list            vl;
  75.     char            StrTmp[256];
  76.     
  77.     va_start(vl,fmt);
  78.     
  79.         vsprintf(StrTmp, fmt, vl);
  80.     
  81.     va_end(vl);
  82.     
  83.     return (_DoError( ErrType, ErrLevel, StrTmp ));
  84. }
  85.  
  86.  
  87.  
  88. static int _DoError( int ErrType, int ErrLevel, char *StrTmp)
  89. {
  90.     Str255            s0, s1, s2, s3;
  91.     Handle            myHandle;
  92.     short            alertID;
  93.     
  94.  
  95.     s0[0]=s1[0]=s2[0]=s3[0]=0x00;
  96.  
  97.     switch(ErrType)
  98.     {
  99.         case STDC_ERR:
  100.         
  101.             err = (OSErr) errno;
  102.             
  103.         case SYS_ERR:
  104.                 
  105.             CStrToStr255( s0, "System Error: ");
  106.             CStrToStr255( s1, StrTmp );
  107.             
  108.             if((myHandle=GetResource(kErrResType, (short) err))==nil)
  109.             {
  110.                 NumToString( (long) err, s2 );
  111.             }    
  112.             else
  113.             {
  114.                 PStrCpy(s2, *myHandle );
  115.                 PStrCpy(s3, (*myHandle)+**myHandle+1 );
  116.             }
  117.             
  118.             break;
  119.             
  120.         case PROG_ERR:
  121.  
  122.             CStrToStr255( s0, "Program Error: ");
  123.             CStrToStr255( s2, StrTmp );
  124.  
  125.             break;
  126.             
  127.         case INPUT_ERR:
  128.         
  129.             CStrToStr255( s0, "Input error: " );
  130.             CStrToStr255( s2, StrTmp );
  131.             
  132.             break;
  133.             
  134.         case NO_ERR:
  135.         
  136.             CStrToStr255( s0, "Warning: " );
  137.             CStrToStr255( s2, StrTmp );
  138.             
  139.             break;
  140.             
  141.         default:
  142.         
  143.             CStrToStr255( s0, "What's up?: " );
  144.             CStrToStr255( s1, StrTmp );
  145.             break;
  146.     }
  147.  
  148.     DoNotification();
  149.     
  150.     ParamText(s0, s1, s2, s3);
  151.     
  152.     alertID = ( ( ErrType == SYS_ERR ) || ( ErrType == STDC_ERR ) ) ?
  153.                 kSysErrNoteID : kGenericNoteID;
  154.                 
  155.     switch(ErrLevel)
  156.     {
  157.         case INFO_ERR:
  158.         case WARN_ERR:
  159.         
  160.             StopAlert(alertID, nil);
  161.             return(0);
  162.             break;
  163.             
  164.         case QUIT_ERR:
  165.         case ABORT_ERR:
  166.         
  167.             StopAlert(alertID, nil);
  168.             ExitToShell();
  169.             break;
  170.             
  171.         case ASK_ERR:
  172.         
  173.             return(
  174.             CautionAlert(alertID, nil)
  175.             );
  176.             break;
  177.             
  178.         case END_ERR:
  179.         
  180.             StopAlert(alertID, nil);
  181.             return(1);
  182.             break;
  183.             
  184.         default:
  185.             return(0);
  186.             break;
  187.     }
  188.     return -1; /* just to make MW compiler happy */
  189. }
  190.  
  191. void  DoNotification( void )
  192. {
  193.     static NMRec        myNotification;
  194.     static Handle        myResHand;
  195.     static Str255        myText;
  196.     EventRecord            theEvent;
  197.     
  198.     
  199.     if ( !gApp.InForeground )
  200.     {
  201.         myResHand    = GetResource('SICN', 128);
  202.         
  203.         HNoPurge(myResHand);
  204.         
  205.         myNotification.qType    = nmType;
  206.         myNotification.nmMark    = 1;
  207.         myNotification.nmIcon    = myResHand;
  208.         myNotification.nmSound    = (Handle) -1;
  209.         myNotification.nmStr    = nil;
  210.         myNotification.nmResp    = nil;
  211.         myNotification.nmRefCon    = 0;
  212.         
  213.         NMInstall( (NMRecPtr) &myNotification);
  214.         
  215.         do
  216.         {
  217.             GetNextEvent(everyEvent, &theEvent);
  218.         }
  219.         while (    ( theEvent.what != osEvt ) ||
  220.                 ( ((theEvent.message >> 24) & 0x0ff) != suspendResumeMessage ) ||
  221.                 ( (theEvent.message & resumeFlag) == 0 )
  222.                 );
  223.                 
  224.     /*
  225.      * Since we are skipping events, probably we will miss some
  226.      * update event, but we should finish the process after calling Alert
  227.      * so, who cares?
  228.      */
  229.  
  230.         gApp.InForeground = true;
  231.         
  232.         NMRemove( (NMRecPtr) &myNotification);
  233.         HPurge(myResHand);
  234.         ReleaseResource(myResHand);
  235.     }
  236. }
  237.     
  238.